স্প্রিং বুট ক্লায়েন্টে OAuth2 ব্যবহার করে API-এর সাথে সুরক্ষিত যোগাযোগ স্থাপন করতে হলে নির্দিষ্ট কনফিগারেশন এবং টুল ব্যবহার করতে হয়। OAuth2 ইনটিগ্রেশনের জন্য স্প্রিং সিকিউরিটির spring-boot-starter-oauth2-client ডিপেনডেন্সি ব্যবহার করা হয়। এখানে উদাহরণসহ OAuth2 ইন্টিগ্রেশনের সম্পূর্ণ প্রক্রিয়া দেখানো হলো।
১. প্রজেক্ট সেটআপ
ডিপেনডেন্সি যোগ করুন
pom.xml-এ OAuth2 ক্লায়েন্টের জন্য নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Gradle ব্যবহার করলে:
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
২. প্রোপার্টিজ কনফিগারেশন
application.yml বা application.properties ফাইলে OAuth2 কনফিগারেশন যুক্ত করুন। এখানে আমরা Google-এর OAuth2 ব্যবহার করছি উদাহরণ হিসেবে:
application.yml
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- openid
- profile
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-authentication-method: basic
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://openidconnect.googleapis.com/v1/userinfo
application.properties
spring.security.oauth2.client.registration.google.client-id=YOUR_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=YOUR_CLIENT_SECRET
spring.security.oauth2.client.registration.google.scope=openid,profile,email
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
spring.security.oauth2.client.registration.google.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.google.client-authentication-method=basic
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://openidconnect.googleapis.com/v1/userinfo
৩. RestTemplate বা WebClient-এ OAuth2 Token ব্যবহার করা
RestTemplate-এ OAuth2 Integration:
স্প্রিং সিকিউরিটির OAuth2AuthorizedClientService ব্যবহার করে টোকেন ফেচ করা হয় এবং এটি হেডারে যোগ করে API কল করা যায়।
উদাহরণ:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class OAuth2RestTemplateClient {
@Autowired
private OAuth2AuthorizedClientService authorizedClientService;
public String getProtectedResource(@RegisteredOAuth2AuthorizedClient("google") OAuth2AuthorizedClient authorizedClient) {
String accessToken = authorizedClient.getAccessToken().getTokenValue();
RestTemplate restTemplate = new RestTemplate();
String url = "https://api.example.com/protected-resource";
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(accessToken);
HttpEntity<String> entity = new HttpEntity<>(headers);
return restTemplate.exchange(url, HttpMethod.GET, entity, String.class).getBody();
}
}
WebClient-এ OAuth2 Integration:
WebClient-এ ServerOAuth2AuthorizedClientExchangeFilterFunction ব্যবহার করে সিম্পল পদ্ধতিতে OAuth2 টোকেন যোগ করা যায়।
উদাহরণ:
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class OAuth2WebClient {
private final WebClient webClient;
public OAuth2WebClient(WebClient.Builder webClientBuilder,
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Client) {
this.webClient = webClientBuilder
.apply(oauth2Client.oauth2Configuration())
.baseUrl("https://api.example.com")
.build();
}
public String getProtectedResource() {
return webClient
.get()
.uri("/protected-resource")
.retrieve()
.bodyToMono(String.class)
.block();
}
}
৪. কন্ট্রোলার তৈরি করা
একটি কন্ট্রোলার তৈরি করুন যা OAuth2 সুরক্ষিত API কল করবে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OAuth2Controller {
@Autowired
private OAuth2RestTemplateClient restTemplateClient;
@Autowired
private OAuth2WebClient webClient;
@GetMapping("/use-resttemplate")
public String callUsingRestTemplate() {
return restTemplateClient.getProtectedResource(null);
}
@GetMapping("/use-webclient")
public String callUsingWebClient() {
return webClient.getProtectedResource();
}
}
৫. রিডিরেকশন এবং লগইন পেজ
OAuth2 ইনটিগ্রেশন করার পর /login এ যাওয়ার মাধ্যমে আপনি OAuth2 প্রদানকারী (যেমন: Google) এর লগইন পেজে রিডিরেক্ট হবেন।
৬. গুরুত্বপূর্ণ পয়েন্ট
- Access Token রিফ্রেশ: যদি টোকেন এক্সপায়ার হয়ে যায়, তাহলে স্বয়ংক্রিয়ভাবে টোকেন রিফ্রেশ করার জন্য স্প্রিং সিকিউরিটির বিল্ট-ইন ফিচার ব্যবহার করা হয়।
- Scope এবং Authorization Grant Type: আপনার প্রয়োজন অনুযায়ী স্কোপ এবং গ্রান্ট টাইপ নির্বাচন করুন।
- Custom Provider: Google ছাড়া অন্য OAuth2 প্রোভাইডারের জন্য প্রয়োজনীয় কনফিগারেশন পরিবর্তন করতে হবে।
এইভাবে আপনি স্প্রিং বুট ক্লায়েন্টে OAuth2 ইন্টিগ্রেশন করতে পারবেন এবং সুরক্ষিত API-এর সাথে যোগাযোগ করতে পারবেন।
Read more